-- KEYS[1]: 用户当日点赞计数 key (thumb:blog:user:{blogId}:{userId}:{date})
-- KEYS[2]: 点赞总数 key (thumb:sum:{blogId})
-- KEYS[3]: 最近点赞记录 key (thumb:blog:{blogId}:recent)
-- ARGV[1]: 当前时间戳（毫秒）
-- ARGV[2]: 当前用户ID
-- ARGV[3]: 今日最大点赞次数限制

local count = redis.call('GET', KEYS[1])

-- 检查是否超过当日点赞上限
if count and tonumber(count) and tonumber(ARGV[3]) and tonumber(count) >= tonumber(ARGV[3]) then
    return -1
end

-- 增加点赞总数
redis.call('INCR', KEYS[2])

-- 更新用户当日点赞次数
if not count then
    redis.call('SET', KEYS[1], 1)

    -- 设置过期时间为当天结束 + 1天
    local now = tonumber(ARGV[1]) / 1000
    local today_end = now - (now % 86400) + 86400
    local expire_seconds = today_end - now + 86400
    redis.call('EXPIRE', KEYS[1], expire_seconds)
else
    redis.call('INCR', KEYS[1])
end

-- 添加到最近点赞 ZSet，并保留最多 100 条
redis.call('ZADD', KEYS[3], ARGV[1], ARGV[2])
redis.call('ZREMRANGEBYRANK', KEYS[3], 0, -101)

return 1
